package com.roamer.rest.exception;


import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import javax.validation.ConstraintViolation;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 参数校验异常信息转换 工具类
 *
 * @author roamer
 * @version V1.0
 * @date 2019/07/17 21:09
 */
public abstract class ValidateConvert {

    /**
     * JSR303规范 校验异常信息转换
     *
     * @param constraintViolations 不合规信息
     *
     * @return {@code List<ParameterInvalidItem>} 自定义参数校验信息
     */
    static List<ParameterInvalidItem> convertToInvalidItemList(Set<ConstraintViolation<?>> constraintViolations) {
        return constraintViolations.stream()
                                   .map(cv -> new ParameterInvalidItem().setField(cv.getPropertyPath().toString())
                                                                        .setMessage(cv.getMessage()))
                                   .collect(Collectors.toList());
    }

    /**
     * Spring's JSR303规范 校验异常信息转换
     *
     * @param bindingResult 不合规信息
     *
     * @return {@code List<ParameterInvalidItem>} 自定义参数校验信息
     */
    public static List<ParameterInvalidItem> convertToInvalidItemList(BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            List<FieldError> fes = bindingResult.getFieldErrors();
            return fes.stream()
                      .map(e -> new ParameterInvalidItem().setField(e.getField()).setMessage(e.getDefaultMessage()))
                      .collect(Collectors.toList());
        }
        return Collections.emptyList();
    }
}
